package com.shop.cereshop.commons.service.pay.impl;

import com.huifu.bspay.sdk.opps.core.BasePay;
import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
import com.huifu.bspay.sdk.opps.core.utils.RsaUtils;
import com.shop.cereshop.commons.config.HuifuBaseConfig;
import com.shop.cereshop.commons.domain.huifu.req.HuifuParamsInfo;
import com.shop.cereshop.commons.domain.huifu.req.QuickbuckleCardbindParam;
import com.shop.cereshop.commons.service.pay.HuifuPayService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@Service("huifupayservice")
public class HuifuPayServiceImpl implements HuifuPayService {
    @Resource
    private HuifuBaseConfig huifuBaseConfig;

    @Override
    public void quickbuckleApply(HuifuParamsInfo paramsInfo) {
        try {
            // 1. 数据初始化，填入对应的商户配置
            BasePay.initWithMerConfig(huifuBaseConfig.getMerConfig());
//            // 2.组装请求参数
//            Map<String, Object> paramsInfo = new HashMap<>();
//            // 请求日期
//            paramsInfo.put("req_date", "20250902");
//            // 请求流水号
//            paramsInfo.put("req_seq_id", "rQ20250902171446121490");
//            // 汇付客户Id
//            paramsInfo.put("huifu_id", "6666000109133323");
//            // 商户用户id
//            paramsInfo.put("out_cust_id", "asdtrw123123123");
//            // 订单号
//            paramsInfo.put("order_id", "20220408105303542461831");
//            // 订单日期
//            paramsInfo.put("order_date", "20220408");
//            // 银行卡绑定证件类型
//            paramsInfo.put("cert_type", "00");
//            // 个人证件有效期类型
//            paramsInfo.put("cert_validity_type", "1");
//            // 个人证件有效期起始日
//            paramsInfo.put("cert_begin_date", "20210806");
//            // 个人证件有效期到期日长期有效不填；&lt;font color&#x3D;&quot;green&quot;&gt;示例值：20420905&lt;/font&gt;
//            paramsInfo.put("cert_end_date", "20410806");
//            // 挂网协议编号授权信息(招行绑卡需要上送)；&lt;font color&#x3D;&quot;green&quot;&gt;示例值：34463343&lt;/font&gt;
//            paramsInfo.put("protocol_no", "test");
//            // 设备信息域
//            paramsInfo.put("trx_device_inf", "test");
//            // 银行卡号
//            paramsInfo.put("card_id", RsaUtils.encrypt("6217001111111111111", huifuBaseConfig.getMerConfig().getRsaPublicKey()));
//            // 银行卡开户姓名
//            paramsInfo.put("card_name", RsaUtils.encrypt("李杰", huifuBaseConfig.getMerConfig().getRsaPublicKey()));
//            // 银行卡绑定身份证
//            paramsInfo.put("cert_id", RsaUtils.encrypt("310101199401053138", huifuBaseConfig.getMerConfig().getRsaPublicKey()));
//            // 银行卡绑定手机号
//            paramsInfo.put("card_mp", RsaUtils.encrypt("15921225137", huifuBaseConfig.getMerConfig().getRsaPublicKey()));
//            // CVV2信用卡交易专用需要密文传输。&lt;br/&gt;使用汇付RSA公钥加密(加密前3位，加密后最长2048位），[参见参考文档](https://paas.huifu.com/open/doc/guide/#/api_jiami_jiemi)；&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值：Ly+fnExeyPOTzfOtgRRur77nJB9TAe4PGgK9M……fc6XJXZss&#x3D;&lt;/font&gt;
//            paramsInfo.put("vip_code", RsaUtils.encrypt("test", huifuBaseConfig.getMerConfig().getRsaPublicKey()));
//            // 卡有效期信用卡交易专用，格式：MMYY，需要密文传输；&lt;br/&gt;使用汇付RSA公钥加密(加密前4位，加密后最长2048位），[参见参考文档](https://paas.huifu.com/open/doc/guide/#/api_jiami_jiemi)；&lt;br/&gt;&lt;font color&#x3D;&quot;green&quot;&gt;示例值：Ly+fnExeyPOTzfOtgRRur77nJB9TAe4PGgK9M……fc6XJXZss&#x3D;JXZss&#x3D;&lt;/font&gt;
//            paramsInfo.put("expiration", RsaUtils.encrypt("test", huifuBaseConfig.getMerConfig().getRsaPublicKey()));
//            // 商户名称
//            paramsInfo.put("merch_name", "测试");
//            // 电子邮箱
//            paramsInfo.put("email", "programmer_yw@163.com");
            // 3. 发起API调用
            Map<String, Object> response = BasePayRequest.requestBasePay("v2/quickbuckle/apply", paramsInfo.toMap(), null, false);
            ;
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void quickbuckleOnekeyCardbind(QuickbuckleCardbindParam param) {
        try {
            // 1. 数据初始化，填入对应的商户配置
            BasePay.initWithMerConfig(huifuBaseConfig.getMerConfig());
            // 2.组装请求参数
            Map<String, Object> paramsInfo = new HashMap<>();
            // 请求流水号
            paramsInfo.put("req_seq_id", param.getReqSeqId());
            // 请求时间
            paramsInfo.put("req_date", param.getReqDate());
            // 汇付Id
            paramsInfo.put("huifu_id", huifuBaseConfig.getMerConfig().getSysId());
            // 顾客用户号
            paramsInfo.put("out_cust_id", param.getOutCustId());
            // 银行号
            paramsInfo.put("bank_id", param.getBankId());
            // 银行卡绑定证件类型
            paramsInfo.put("cert_type", param.getCertType());
            // 证件有效期到期日长期有效不填.格式：yyyyMMdd
            paramsInfo.put("cert_end_date", param.getCertEndDate());
            // 卡的借贷类型
            paramsInfo.put("dc_type", param.getDcType());
            // 异步请求地址
            paramsInfo.put("async_return_url", param.getAsyncReturnUrl());
            // 设备信息域
            paramsInfo.put("trx_device_inf", param.getTrxDeviceInf());
            // 银行卡开户姓名
            paramsInfo.put("card_name", RsaUtils.encrypt(param.getCardName(), huifuBaseConfig.getMerConfig().getRsaPublicKey()));
            // 银行卡绑定身份证
            paramsInfo.put("cert_id", RsaUtils.encrypt(param.getCertId(), huifuBaseConfig.getMerConfig().getRsaPublicKey()));
            // 银行卡绑定手机号
            paramsInfo.put("card_mp", RsaUtils.encrypt(param.getCardMp(), huifuBaseConfig.getMerConfig().getRsaPublicKey()));
            // 证件有效期类型
            paramsInfo.put("cert_validity_type", param.getCertValidityType());
            // 证件有效期起始日
            paramsInfo.put("cert_begin_date", param.getCertBeginDate());
            // 3. 发起API调用
            Map<String, Object> response = BasePayRequest.requestBasePay("v2/quickbuckle/onekey/cardbind", paramsInfo, null, false);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void quickbuckleUnbind() {

    }

    @Override
    public void quickbuckleBankQuery() {
        try {

            BasePay.initWithMerConfig(huifuBaseConfig.getMerConfig());
            // 2.组装请求参数
            Map<String, Object> paramsInfo = new HashMap<>();
            // 请求流水号
            paramsInfo.put("req_seq_id", "rQ20250902" + System.currentTimeMillis());
            // 请求时间
            paramsInfo.put("req_date", "20250902");
            // 商户汇付Id
            paramsInfo.put("huifu_id", huifuBaseConfig.getMerConfig().getSysId());
            // 业务类型
            paramsInfo.put("biz_type", "B2C");
            // 借贷类型
            paramsInfo.put("dc_type", "D");
            // 3. 发起API调用
            Map<String, Object> response = BasePayRequest.requestBasePay("v2/quickbuckle/bank/query", paramsInfo, null, false);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
